package BancoDeDados.MySQL;

import BancoDeDados.ConexaoDB;
import Biblioteca.ConexaoSSH;
import java.io.FileInputStream;
import java.sql.DriverManager;
import java.util.Properties;

/**
 * ConexaoMySQL
 *
 * Versao 1.0
 *
 * Data Criação 28/01/2014
 *
 * @author Igor
 */
public class ConexaoMySQL extends ConexaoDB {

    //Atributos
    private static ConexaoMySQL uniqueInstance;

    //Construtores
    private ConexaoMySQL() throws Exception {
        this.gerenciarConfiguracoes();

        //try {
        // Carregando o JDBC Driver padrão
        Class.forName(super.driver);
        super.con = DriverManager.getConnection(super.url, super.userNameDB, super.passwordDB);

        /*} catch (Exception e) {  //Driver não encontrado
         JOptionPane.showMessageDialog(null, VerificaErros.retornaMensagemErro(e), "Erro!", JOptionPane.ERROR_MESSAGE);
         System.exit(0);
         }*/
    }

    //Outros metodos
    @Override
    public void gerenciarConfiguracoes() throws Exception {
        Properties config = new Properties();
        String arquivoProperties = "./configTREF.properties";
        //try {
        config.load(new FileInputStream(arquivoProperties));
        /*} catch (IOException ex) {
         Logger.getLogger(ConexaoMySQL.class.getName()).log(Level.SEVERE, null, ex);
         }*/

        String porta = config.getProperty("MySQL_porta");
        String ipServidor = config.getProperty("MySQL_ipServidor");
        String arquivoBD = config.getProperty("MySQL_baconDeDados");
        String userName = config.getProperty("MySQL_userName");
        String password = config.getProperty("MySQL_password");

        super.driver = "com.mysql.jdbc.Driver";
        // Configurando a nossa conexão com um banco de dados//
        super.arquivo = arquivoBD;        //nome do seu banco de dados
        super.url = "jdbc:mysql://" + ipServidor + ":" + porta + "/" + super.arquivo;
        super.userNameDB = userName;        //nome de um usuário de seu BD      
        super.passwordDB = password;      //sua senha de acesso

        if (config.getProperty("SSH_conexao").equals("true")) {
            int sshPortBindTunel = ConexaoSSH.doSshTunnel(config.getProperty("SSH_userName"),
                    config.getProperty("SSH_password"),
                    config.getProperty("SSH_host"),
                    Integer.parseInt(config.getProperty("SSH_port")),
                    ipServidor,
                    Integer.parseInt(porta));

            super.url = "jdbc:mysql://" + ipServidor + ":" + sshPortBindTunel + "/" + super.arquivo;
        }
    }

    public static synchronized ConexaoMySQL getInstance() throws Exception {
        if (uniqueInstance == null) {
            uniqueInstance = new ConexaoMySQL();
        }
        return uniqueInstance;
    }
}
